package sany.iec.utils;

import java.util.Arrays;

/**
 * @Author : 托马斯
 * @Date : 2025/7/3 10:33
 * @Description :
 */
public class DataParseUtil {

    /**
     * 如果是负数则进行截断
     *
     * @param s : 得到16进制的字符
     * @return
     */
    public static String get16Char(Short s) {
        String str = String.format("%16s", Integer.toBinaryString(s)).replace(' ', '0');
        int length = str.length() - 16;
        return str.substring(length);
    }

    public static String get32Char(Float s) {
        // 将 float 转换为 IEEE 754 表示的 int
        int bits = Float.floatToIntBits(s);
        // 转换为 32 位二进制字符串（前面补 0）
        return String.format("%32s", Integer.toBinaryString(bits)).replace(' ', '0');
    }

    /**
     * 通过16位二进制得到Short
     *
     * @param s
     * @return
     */
    public static Short getShort(String s) {
        return (short) Integer.parseInt(s, 2);
    }

    /**
     * 通过16位二进制得到Float
     *
     * @param s
     * @return
     */
    public static Float getFloat(String s) {
        int flag = s.charAt(0) == '1' ? -1 : 1;
        s = '0' + s.substring(1);
        Integer intBits = Integer.parseInt(s, 2);
        return Float.intBitsToFloat(intBits) * flag;
    }

    /**
     * 得到浮点数 floatABCD
     *
     * @param num1
     * @param num2
     * @return
     */
    public static Float getFloatABCD(Short num1, Short num2) {
        String AB = get16Char(num1);
        String CD = get16Char(num2);
        String str = AB + CD;
        return getFloat(str);
    }

    /**
     * 得到浮点数 floatCDAB
     *
     * @param num1
     * @param num2
     * @return
     */
    public static Float getFloatCDAB(Short num1, Short num2) {
        String AB = get16Char(num1);
        String CD = get16Char(num2);
        String str = CD + AB;
        return getFloat(str);
    }

    /**
     * 将floatCDAB的数据转为两个Short，第一个是AB，第二个是CD
     * @param num
     * @return
     */
    public static Short[] getNumsFromFloatCDAB(Float num) {
        String s = get32Char(num);
        return new Short[]{
                getShort(s.substring(16)),
                getShort(s.substring(0, 16))
        };
    }

    public static void main(String[] args) {
        Short[] numsFromFloatCDAB = getNumsFromFloatCDAB(-123.34f);
        System.out.println(Arrays.toString(numsFromFloatCDAB));
    }

}
